A continuación se explica como instalar un entorno de desarrollo (docker, angular, python) dentro de wsl, para hacer que el ordenador tenga un mejor rendimiento.
No sé decir cual es la causa raiz del problema exactamente, pero está claramente relacionada con el sistema de archivos, siempre que se intenta ejecutar algo en nuestro entorno de windows hay algún tipo de monitorización en el sistema de archivos(probablemente el antivirus o algo por el estilo) que hace que la ejecución vaya mas lenta.
El truco de todo esto es que desde el sistema de archivos interno del WSL no se da este problema y la ejecución es mucho más rapida. Incluso si estamos dentro del WSL y ejecutamos comandos que hacen uso del sistema de archivos anfitrion (la particion montada en /mnt/c/) seguiremos teniendo estos problemas de rendimiento, el truco es usar solo el sistema de archivos interno de la maquina montada en WSL. Los problemas de rendimiento se acentuan sobre todo con lenguajes de scripting, node, python...etc
Para utilizar solo el sistema de archivos interno instalaremos todo nuestro entorno de desarrollo dentro de la maquina de WSL y programaremos directamente dentro de dicha maquina, solo tendremos que conectar el VSCode a la maquina que hay dentro de WSL y podremos hacerlo funcionar todo de manera transparente.
A pesar de que la solución principal es utilizar WSL os dejo aqui un par de trucos para cargar menos el ordenador:
La resolución que trae por defecto el surface es altísima, podemos bajar la resolución para que el sistema tenga menos carga.
Por defecto la resolución es 2256x1504 con un aumento del 150%, para mantener la relación de aspecto de la pantalla podeis coger la resolucion 1620x1080 con aumento al 100%.
La diferencía es inapreciable, pero el rendimiento del ordenador será mejor ya que tiene que procesar mucho menos.
Esto pasa con todos los portatiles, cuando se desconectan del cargador y se deja solo con la batería el sistema limita el procesador para alargar la duración de la bateria, si quereis tener mas rendimiento dejarlo enchufado al cargador.
Lo primero es instalar WSL, podeis ver todos los detalles en la página de microsoft:
Install WSLBásicamente lo único que hay que hacer es abrir un terminal como administrador y lanzar el comando:
wsl --install
Por defecto instala una distribución de ubuntu, yo estoy usando la versión 20.04 LTS
Al finalizar el proceso de instalación igual ya os entra directamente en la maquina virtual que os instale, podeis salir tecleando el comando "exit"
Es importante que la maquina que estemos usando esté con la versión 2 de WSL, para comprobar esto lanzamos el siguiente comando desde una terminal de windows:
wsl -l -v
Deberíamos de ver algo como esto:
Si vemos que tenemos la version 1, tenemos que cambiarla, usaríamos el siguiente comando:
wsl --set-version Ubuntu 2
El proceso le puede llevar un par de minutos...
Una vez tengamos instalado WSL y configurada la versión 2, tenemos que configurar una serie de archivos dentro de nuestra maquina virtual.
Accedemos a nuestra maquina de WSL (ubuntu en mi caso), ejecutamos el siguiente comando en una consola:
wsl
Si solo tenemos una maquina instalada no hace falta indicar ningún parámetro, WSL iniciará nuestra maquina por defecto, si tenemos varías maquinas podemos indicar el nombre de la distribución como segundo parámetro y se lanzará la que indiquemos (podemos consultar la lista de todas las distribuciones instaladas con el comando wsl -l -v).
Una vez dentro de nuestra maquina tendremos que editar varios archivos, podemos hacer con vim, nano o cualquier otro editor de archivos.
[network]
generateResolvConf = false
[interop]
appendWindowsPath = false
sudo rm /etc/resolv.conf
nameserver 8.8.8.8
NOTA: Cambiar el nombre de usuario por el vuestro en la ruta.
export PATH="$PATH:/mnt/c/WINDOWS/System32:/mnt/c/Users/manuel.bascoy/AppData/Local/Programs/Microsoft VS Code/bin"
export PATH="/home/usuario/.local/bin:$PATH"
NOTA: en este caso "usuario" es el nombre de mi usuario, aqui tendreis que poner el nombre de vuestro usuario, es el usuario de la maquina virtual, tiene que haberse indicado durante la instalación de la distribución.
Despues de haber hecho todos los cambios tenemos que reiniciar la maquina, salimos con exit y volvemos a entrar con el comando wsl
Una vez hecho todo esto solo nos queda instalar los entornos de programación que utilicemos, en este caso instalaré: Angular, Python y Docker
Comprobad si teneis instalado git en la maquina virtual, si no lo teneis instalado podeis instalarlo con el siguiente comando:
sudo apt-get install git
Para abrir el VSCode conectado a nuestra maquina virtual solo tenemos que lanzar el siguiente comando dentro de nuestra maquina virtual:
code .
Ese comando abrirá el VSCode en la carpeta actual, podemos indicarle como parámetro un archivo de workspace si queremos.
Desde el VSCode todas las terminales que abramos serán terminales dentro de la propia maquina virtual, de manera que podemos trabajar directamente con las terminales en VSCode sin tener que usar el cmd para ejecutar otros comandos.
Para instalar Angular ejecutamos los siguientes comandos:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
sudo npm install -g npm@latest
sudo npm install -g @angular/cli@latest
Para instalar Python ejecutamos los siguientes comandos:
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt install python3.10
Una vez instalado todo esto abrimos nuestro VSCode (con el comando code desde la maquina virtual), e instalamos la siguiente extensión para poder código de python:
Si ya teniamos alguna versión de python3 instalada tendremos que actualizar el enlace simbolico:
cd /usr/bin/
sudo rm python3
sudo ln ls python3.10 python
Para instalar poetry y configurarlo en el VSCode lo hacemos asi:
Ejecutamos el siguiente comando:
curl -sSL https://install.python-poetry.org | python3 -
En la carpeta de nuestro proyecto ejecutamos el comando:
poetry install
Lanzamos el siguiente comando para obtener el interprete virtual:
poetry env info
Cogemos la linea Executable y en nuestro VSCode pulsamos F1 y buscamos la opción "python interpreter" y añadimos el interprete que hemos obtenido con el comando anterior, con esto nuestro proyecto ya está listo para ser lanzado desde el VSCode.
Si queremos instalar docker en nuestro WSL ejecutamos los siguientes comandos:
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
sudo service docker start
sudo groupadd docker
sudo usermod -aG docker $USER
Si queremos que el servicio de docker se inicie de manera automática al arrancar nuestra maquina virtual podemos añadir la siguiente configuración en el archivo ~/.profile (el archivo .profile de nuestra carpeta de usuario):
wsl.exe -u root -e sh -c "service docker status || service docker start"
Para acceder mas comodamente al sistema de archivos interno de WSL podemos hacerlo de dos maneras:
Podemos acceder al sistema de archivos usando la siguiente dirección en el explorador de archivos:
\\wsl$
De esta manera podemos acceder al sistema entero (solo es una ubicación de red), y tratarlo como si fuese una carpeta más del sistema, podemos crear accesos directos a las carpetas donde tengamos nuestros proyectos si queremos.
Para esto tendremos que instalar la siguiente extensión:
Una vez instalada podemos acceder al sistema de archivos desde la siguiente opción del IDE
De igual manera que con el explorador de archivos podemos acceder a todo el contenido de la maquina virtual, pero en este caso directamente desde el propio VSCode.
El WSL tiene un sonido constante de la campana del sistema, cada vez que tabulas o pulsas backspace y no hay nada que borrar se emite el sonido, que puede llegar a ser muy molesto, se puede desactivar de la siguiente manera:
Para eliminarlo de manera general lo hacemos editando el archivo /etc/inputrc, añadimos la opción:
set bell-style none
Quitar el sonido en Vim: editamos el archivo ~/.vimrc añadiendo el siguiente contenido:
set visualbell
set t_vb=
Quitar el sonido en less: editamos el archivo ~/.profile añadiendo la siguiente linea:
export LESS="$LESS -R -Q"